package cn.com.bluemoon.daps.standard.service;

import cn.com.bluemoon.daps.common.mp.IBmService;
import cn.com.bluemoon.daps.standard.entity.DapSystemCategory;
import com.google.common.collect.ImmutableMap;
import org.springframework.validation.annotation.Validated;
import reactor.util.function.Tuple2;

import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * <p>
 * 标准-分类表 服务类
 * </p>
 *
 * @author admin
 * @since 2020-08-03
 */
@Validated
public interface DapSystemCategoryService extends IBmService<DapSystemCategory> {

    /**
     * 获取当前主题分类的名称和id的映射关系
     * tuple 0 为第一个 主题-id map
     * tuple 1 为第二个 分类-id map
     */
    @Deprecated
    Tuple2<Map<String, String>, Map<String, String>> dbTopicAndCategoryTuple();

    /**
     * @param type 1 topic 0 category 其他获取主题和分类全部
     */
    List<DapSystemCategory> systemTopicAndCategories(String type);

    /**
     * 根据父类id获取
     */
    List<DapSystemCategory> findSystemCategoriesByParentId(String parentId);

    /**
     * 根据代码名称获取分类信息
     */
    Optional<DapSystemCategory> findOneByCodeName(String codeName, boolean isTopic);

    /**
     * 获取主题分类
     */
    ImmutableMap<String, Map<String, List<DapSystemCategory>>> getTopicsAndCategories();

    /**
     * 删除
     *
     * @param isLogic 逻辑删除？
     */
    boolean deleteById(@NotBlank(message = "分类id") String id, boolean isLogic);

    /**
     * 获取主题第几层
     *
     * @param level 1 为主题的第一层
     *              2 为主题的第二层 （默认）
     */
    List<DapSystemCategory> findTopicsByLevel(Integer level);

    /**
     * 新增或修改主题分类
     */
    DapSystemCategory saveOrUpdateSysCategory(DapSystemCategory sysCategory);

    /** 删除 带校验 */
    boolean deleteTopicCategoryById(String topicCategoryId);
}
